package com.doubao.device.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.doubao.common.result.Result;
import com.doubao.device.dto.RatingDTO;
import com.doubao.device.dto.request.RatingRequest;
import com.doubao.device.entity.DeviceRating;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 智能体评分服务接口
 */
public interface DeviceRatingService extends IService<DeviceRating> {

    /**
     * 评分
     *
     * @param userId 用户ID
     * @param request 评分请求
     * @return 评分结果
     */
    Result<RatingDTO> rateDevice(Long userId, RatingRequest request);

    /**
     * 删除评分
     *
     * @param userId 用户ID
     * @param ratingId 评分ID
     * @return 删除结果
     */
    Result<Void> deleteRating(Long userId, Long ratingId);

    /**
     * 获取用户对智能体的评分
     *
     * @param userId 用户ID
     * @param deviceId 智能体ID
     * @return 评分
     */
    Result<RatingDTO> getUserRating(Long userId, Long deviceId);

    /**
     * 获取智能体评分列表
     *
     * @param deviceId 智能体ID
     * @param page 页码
     * @param size 每页大小
     * @return 评分分页列表
     */
    Result<IPage<RatingDTO>> getDeviceRatings(Long deviceId, Integer page, Integer size);

    /**
     * 判断用户是否已评分
     *
     * @param userId 用户ID
     * @param deviceId 智能体ID
     * @return 是否已评分
     */
    Result<Boolean> isRated(Long userId, Long deviceId);

    /**
     * 获取智能体平均评分
     *
     * @param deviceId 智能体ID
     * @return 平均评分
     */
    Result<BigDecimal> getAverageRating(Long deviceId);

    /**
     * 更新智能体平均评分
     *
     * @param deviceId 智能体ID
     * @return 更新结果
     */
    Result<Void> updateDeviceAverageRating(Long deviceId);

    /**
     * 获取智能体评分统计
     *
     * @param deviceId 智能体ID
     * @return 评分统计
     */
    Result<Map<Integer, Integer>> getRatingStats(Long deviceId);
}